home *** CD-ROM | disk | FTP | other *** search
/ Flash MX Savvy / FlashMX Savvy.iso / pc / MAC / Amapi3D / Amapi3DTrial_Edition / 3SPACE / xdr-schema.xsl < prev   
Encoding:
Extensible Markup Language  |  2000-12-04  |  40.7 KB  |  1,021 lines  |  [TEXT/CWIE]

  1. <?xml version="1.0"?>
  2. <!--
  3.  
  4.   xdr-schema.xsl
  5.   
  6.   Stylesheet for XML Data Reduced Schemas, 
  7.   see http://msdn.microsoft.com/xml/reference/schema/start.asp.
  8.   XSL compatible with Microsoft Internet Explorer 5,
  9.   see http://msdn.microsoft.com/xml/xslguide.
  10.   
  11.   Author: Jonathan Marsh <jmarsh@microsoft.com>
  12.   Copyright 2000 Microsoft Corp.
  13.   
  14. -->
  15.  
  16. <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"
  17.                 xmlns:s="urn:schemas-microsoft-com:xml-data"
  18.                 xmlns:dt="urn:schemas-microsoft-com:datatypes">
  19.  
  20. <xsl:template match="/">
  21.   <!-- stylesheet works on schema elements, schema documents, and documents
  22.        with in-lined schemas -->
  23.   <xsl:apply-templates select="s:Schema|*/s:Schema"/>
  24. </xsl:template>
  25.  
  26. <xsl:template match="s:Schema">
  27.   <HTML>
  28.     <HEAD>
  29.       <STYLE><![CDATA[
  30.         BODY { font-family: Arial; font-size: smaller }
  31.  
  32.         A {text-decoration: none}
  33.         A:hover {text-decoration: underline}
  34.         A:active {text-decoration: underline}
  35.  
  36.         TABLE.list {}
  37.         TABLE.list TH
  38.         {
  39.           background-color: darkblue;
  40.           color:white;
  41.           padding:0.5em;
  42.           padding-right:4em;
  43.           margin:0px;
  44.           font-size: x-small;
  45.           font-weight: bold;
  46.           vertical-align:baseline;
  47.           text-align: left;
  48.         }
  49.         TABLE.list TH.elements { background-color: darkblue; }
  50.         TABLE.list TH.attributes { background-color: darkred; }
  51.         TABLE.list TH A {color:white}
  52.  
  53.         TABLE.list TD
  54.         {
  55.           border:1px solid black;
  56.           padding:0.5em;
  57.           margin:0px;
  58.           font-size: x-small;
  59.           vertical-align:baseline;
  60.         }
  61.         TABLE.list TD.elements { border: 1px solid darkblue; }
  62.         TABLE.list TD.attributes { border: 1px solid darkred; }
  63.  
  64.         TABLE.elements TD
  65.         {
  66.           padding-left:0.5em;
  67.           margin:0px;
  68.           font-size: x-small;
  69.           vertical-align:baseline;
  70.         }
  71.  
  72.         TABLE.syntax-children TD
  73.         {
  74.           padding:0px;
  75.           margin:0px;
  76.           font-size: x-small;
  77.           vertical-align:baseline;
  78.         }
  79.  
  80.         TABLE.syntax-children {
  81.           padding:0px;
  82.           margin:0px;
  83.         }
  84.  
  85.         .heading { text-align:right;}
  86.         .content { vertical-align: baseline; }
  87.         PRE { font-size:8pt; background-color:#EEEEEE; }
  88.  
  89.         .note { color:gray;}
  90.  
  91.         .syntax-element { font-weight:bold; }
  92.         .syntax-datatype-enumeration { font-style:italic; color:darkgreen; }
  93.         .syntax-attribute { font-style:italic; }
  94.         .syntax-element-attribute { }
  95.         .syntax-additional-attributes { padding:0px; margin:0px;}
  96.  
  97.         .syntax-children .syntax-group-description { font-size:xx-small; color:gray; }
  98.         
  99.         .syntax-children .syntax-order {
  100.           vertical-align: middle;
  101.           color:purple;
  102.           font-size:xx-small;
  103.           font-weight:bold;
  104.           border-right: 1px solid gray;
  105.           text-align:right;
  106.           padding-right:2px;
  107.         }
  108.  
  109.         .syntax-children .left-bracket {
  110.           border-left: 1px solid black;
  111.           border-top: 1px solid black;
  112.           border-bottom: 1px solid black;
  113.           padding:0px;
  114.         }
  115.         .syntax-children .right-bracket {
  116.           border-right: 1px solid black;
  117.           border-top: 1px solid black;
  118.           border-bottom: 1px solid black;
  119.           padding:0px;
  120.         }
  121.         .syntax-children .left-group {
  122.           padding:0px;
  123.         }
  124.         .syntax-children .right-group {
  125.           border-right: 1px solid gray;
  126.           padding:0px;
  127.         }
  128.  
  129.         .attribute-link { color: darkred; }
  130.         .element-link { color: darkblue; }
  131.         .datatype-link { color : darkgreen; font-style : italic; }
  132.         .reference-link { color : purple; font-style : italic; }
  133.  
  134.         .description {
  135.           padding-bottom:.4em;
  136.           padding-top:.2em;
  137.           font-weight:bold;
  138.           border-bottom:1px solid gray;
  139.         }
  140.  
  141.         .elementType
  142.         {
  143.           background-color: darkblue;
  144.           color: white;
  145.           display: block;
  146.           font-size : larger;
  147.           font-weight : bolder;
  148.           padding : 1pt;
  149.           padding-left : 5pt;
  150.           margin-top : 18pt;
  151.         }
  152.  
  153.         .attributeType
  154.         {
  155.           background-color: darkred;
  156.           color: white;
  157.           display: block;
  158.           font-size : larger;
  159.           font-weight : bolder;
  160.           padding : 1pt;
  161.           padding-left : 5pt;
  162.           margin-top : 18pt;
  163.         }
  164.  
  165.         H2
  166.         {
  167.           background-color: black;
  168.           color: white;
  169.           padding : 4pt;
  170.           padding-left : 5pt;
  171.         }
  172.         #elements { background-color: darkblue; }
  173.         #attributes { background-color: darkred; }
  174.         #reference { background-color: purple; }
  175.         #datatypes { background-color: darkgreen; }
  176.         #source { background-color: darkgray; }
  177.           
  178.  
  179.         .ref-heading { font-size:smaller; font-weight:bold; }
  180.         .ref-content { font-size:smaller; margin-left:2em; margin-bottom:.3em; }
  181.       ]]></STYLE>
  182.     </HEAD>
  183.     <BODY>
  184.  
  185.     <H1>
  186.       XML Schema<xsl:if test="@name">: <xsl:value-of select="@name"/></xsl:if>
  187.       
  188.     </H1>
  189.     
  190.     <DIV class="toc">
  191.       
  192.       <!-- Treat any markup within a description as well-formed HTML -->
  193.       <xsl:if test="s:description">
  194.         <P>
  195.           <xsl:apply-templates select="s:description/node()">
  196.             <xsl:template><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template>
  197.           </xsl:apply-templates>
  198.         </P>
  199.       </xsl:if>
  200.       
  201.       <H5>Contents:</H5>
  202.       <UL>
  203.         <LI><A href="#elements"><xsl:if test="@name"><xsl:value-of select="@name"/></xsl:if>
  204.             Elements</A></LI>
  205.         <LI><A href="#attributes"><xsl:if test="@name"><xsl:value-of select="@name"/></xsl:if>
  206.             Attributes</A></LI>
  207.         <LI><A href="#source"><xsl:if test="@name"><xsl:value-of select="@name"/></xsl:if>
  208.             Source</A></LI>
  209.         <LI><A href="#reference">Schema Attributes Reference</A></LI>
  210.         <LI><A href="#datatypes">Datatypes Reference</A></LI>
  211.       </UL>
  212.         
  213.       <P>This schema describes the following elements and attributes:</P>
  214.       
  215.       <TABLE class="list">
  216.         <TR>
  217.           <TH class="elements"><A href="#Elements">Elements</A></TH>
  218.           <TH class="attributes"><A href="#Attributes">Attributes</A></TH>
  219.           <TH class="attributes"><A href="#Attributes">Element-specific Attributes</A></TH>
  220.         </TR>
  221.  
  222.         <TR>
  223.           <TD class="elements">
  224.             <xsl:for-each select="s:ElementType" order-by="@name">
  225.               <xsl:choose>
  226.                 <!-- Look for the document element, as one which is not contained in any
  227.                      other element content models.  Won't always work, since XML Schema
  228.                      currently doesn't have the concept of a prescribed document element,
  229.                      but generally this will work.  -->
  230.                 <xsl:when test="..[not(.//s:element[@type=context()/@name])]">
  231.                   <B><<A class="element-link"><xsl:attribute name="href">#ELEMENT_<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>></B>
  232.                   <xsl:choose>
  233.                     <xsl:when test=".//s:element">
  234.                       (document element)
  235.                     </xsl:when>
  236.                     <xsl:otherwise>
  237.                       (possible orphan)
  238.                     </xsl:otherwise>
  239.                   </xsl:choose>
  240.                 </xsl:when>
  241.                 <xsl:otherwise>
  242.                   <<A class="element-link"><xsl:attribute name="href">#ELEMENT_<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>>
  243.                 </xsl:otherwise>
  244.               </xsl:choose>
  245.               <BR/>
  246.             </xsl:for-each>
  247.           </TD>
  248.           
  249.           <TD class="attributes">
  250.             <xsl:for-each select="s:AttributeType" order-by="@name">
  251.               <A class="attribute-link"><xsl:attribute name="HREF">#ATTRIBUTE_<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>
  252.               <BR/>
  253.             </xsl:for-each>
  254.           </TD>
  255.           
  256.           <TD class="attributes">
  257.             <!-- Handle element-scoped attributes separately -->
  258.             <xsl:for-each select="*//s:AttributeType" order-by="ancestor(s:ElementType)/@name">
  259.               <<A class="element-link"><xsl:attribute name="HREF">#ELEMENT_<xsl:value-of select="ancestor(s:ElementType)/@name"/></xsl:attribute><xsl:value-of select="ancestor(s:ElementType)/@name"/></A>
  260.               <A class="attribute-link"><xsl:attribute name="HREF">#ELEMENTATTRIBUTE_<xsl:value-of select="ancestor(s:ElementType)/@name"/>_<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></A>>
  261.               <BR/>
  262.             </xsl:for-each>
  263.           </TD>
  264.         </TR>
  265.       </TABLE>
  266.       
  267.       <P>Document conventions:</P>
  268.       <UL>
  269.         <LI>[] - optional</LI>
  270.         <LI>[]* - zero or more times</LI>
  271.         <LI>+ - one or more times</LI>
  272.       </UL>
  273.           
  274.  
  275.     </DIV>
  276.   
  277.     <DIV class="list">
  278.       <H2 id="Elements"><xsl:if test="@name"><xsl:value-of select="@name"/></xsl:if>
  279.         Elements</H2>
  280.       <xsl:apply-templates select="s:ElementType" order-by="@name"/>
  281.     </DIV>
  282.     
  283.     <DIV class="list">
  284.       <H2 id="Attributes"><xsl:if test="@name"><xsl:value-of select="@name"/></xsl:if>
  285.         Attributes</H2>
  286.       <xsl:apply-templates select="s:AttributeType | *//s:AttributeType" order-by="@name" />
  287.     </DIV>
  288.  
  289.     <DIV class="list">
  290.       <H2 id="Source"><xsl:if test="@name"><xsl:value-of select="@name"/></xsl:if>
  291.         Source</H2>
  292.       <PRE><xsl:eval>this.xml</xsl:eval></PRE>
  293.     </DIV>
  294.  
  295.     <H2 id="Reference">Schema Attributes Reference: </H2>
  296.  
  297.     <DIV class="ref-heading"><A name="model_open">open model</A></DIV>
  298.     <DIV class="ref-content">
  299.       The element can contain elements, attributes, and text not specified in 
  300.       the content model.  This is the default value.
  301.     </DIV>
  302.  
  303.     <DIV class="ref-heading"><A name="model_closed" class="ReferenceHeading">closed model</A></DIV>
  304.     <DIV class="ref-content">
  305.       The element cannot contain elements, attributes, and text except for 
  306.       that specified in the content model.  DTDs use a closed model.
  307.     </DIV>
  308.  
  309.     <DIV class="ref-heading"><A name="content_textOnly" class="ReferenceHeading">textOnly content</A></DIV>
  310.     <DIV class="ref-content">
  311.       The element can contain only text, not elements.  Note that if the 
  312.       model attribute is set to "open", the element can contain text and 
  313.       additional elements.
  314.     </DIV>
  315.  
  316.     <DIV class="ref-heading"><A name="content_eltOnly" class="ReferenceHeading">eltOnly content</A></DIV>
  317.     <DIV class="ref-content">
  318.       The element can contain only the elements, not free text.  Note that 
  319.       if the model attribute is set to "open", the element can contain text 
  320.       and additional elements.
  321.     </DIV>
  322.  
  323.     <DIV class="ref-heading"><A name="content_empty" class="ReferenceHeading">empty content</A></DIV>
  324.     <DIV class="ref-content">
  325.       The element cannot contain text or elements.  Note that if the model 
  326.       attribute is set to "open", the element can contain text and additional 
  327.       elements.
  328.     </DIV>
  329.  
  330.     <DIV class="ref-heading"><A name="content_mixed" class="ReferenceHeading">mixed content</A></DIV>
  331.     <DIV class="ref-content">
  332.       The element can contain a mix of named elements and text.  This is 
  333.       the default value.
  334.     </DIV>
  335.  
  336.     <DIV class="ref-heading"><A name="order_one" class="ReferenceHeading">one order</A></DIV>
  337.     <DIV class="ref-content">
  338.       Permits only one of a set of elements.
  339.     </DIV>
  340.  
  341.     <DIV class="ref-heading"><A name="order_seq" class="ReferenceHeading">seq order</A></DIV>
  342.     <DIV class="ref-content">
  343.       Requires the elements to appear in the specified sequence.
  344.     </DIV>
  345.  
  346.     <DIV class="ref-heading"><A name="order_many" class="ReferenceHeading">many order</A></DIV>
  347.     <DIV class="ref-content">
  348.       Permits the elements to appear (or not appear) in any order.  This is the default.
  349.     </DIV>
  350.  
  351.     <H2 id="Datatypes">Datatype Reference:</H2>
  352.     
  353.     <DIV class="ref-heading"><A name="datatype_bin.base64" class="ReferenceHeading">bin.base64 datatype</A></DIV>
  354.     <DIV class="ref-content">
  355.       MIME-style Base64 encoded binary BLOB. 
  356.     </DIV>
  357.  
  358.     <DIV class="ref-heading"><A name="datatype_bin.hex" class="ReferenceHeading">bin.hex datatype</A></DIV>
  359.     <DIV class="ref-content">
  360.       Hexadecimal digits representing octets. 
  361.     </DIV>
  362.  
  363.     <DIV class="ref-heading"><A name="datatype_boolean" class="ReferenceHeading">boolean datatype</A></DIV>
  364.     <DIV class="ref-content">
  365.       0 or 1, where 0 == "false" and 1 =="true". 
  366.     </DIV>
  367.  
  368.     <DIV class="ref-heading"><A name="datatype_char" class="ReferenceHeading">char datatype</A></DIV>
  369.     <DIV class="ref-content">
  370.       String, one character long. 
  371.     </DIV>
  372.  
  373.     <DIV class="ref-heading"><A name="datatype_date" class="ReferenceHeading">date datatype</A></DIV>
  374.     <DIV class="ref-content">
  375.       Date in a subset ISO 8601 format, without the time data. For example: "1994-11-05". 
  376.     </DIV>
  377.  
  378.     <DIV class="ref-heading"><A name="datatype_dateTime" class="ReferenceHeading">dateTime datatype</A></DIV>
  379.     <DIV class="ref-content">
  380.       Date in a subset of ISO 8601 format, with optional time and no optional zone. Fractional seconds can be as precise as nanoseconds. For example, "1988-04-07T18:39:09". 
  381.     </DIV>
  382.  
  383.     <DIV class="ref-heading"><A name="datatype_dateTime.tz" class="ReferenceHeading">dateTime.tz datatype</A></DIV>
  384.     <DIV class="ref-content">
  385.       Date in a subset ISO 8601 format, with optional time and optional zone. Fractional seconds can be as precise as nanoseconds. For example: "1988-04-07T18:39:09-08:00". 
  386.     </DIV>
  387.  
  388.     <DIV class="ref-heading"><A name="datatype_entity" class="ReferenceHeading">entity datatype</A></DIV>
  389.     <DIV class="ref-content">
  390.       Represents the XML ENTITY type. 
  391.     </DIV>
  392.  
  393.     <DIV class="ref-heading"><A name="datatype_entities" class="ReferenceHeading">entities datatype</A></DIV>
  394.     <DIV class="ref-content">
  395.       Represents the XML ENTITIES type. 
  396.     </DIV>
  397.  
  398.     <DIV class="ref-heading"><A name="datatype_enumeration" class="ReferenceHeading">enumeration datatype</A></DIV>
  399.     <DIV class="ref-content">
  400.       Represents an enumerated type (supported on attributes only). 
  401.     </DIV>
  402.  
  403.     <DIV class="ref-heading"><A name="datatype_fixed.14.4" class="ReferenceHeading">fixed.14.4 datatype</A></DIV>
  404.     <DIV class="ref-content">
  405.       Same as "number" but no more than 14 digits to the left of the decimal point, and no more than 4 to the right. 
  406.     </DIV>
  407.  
  408.     <DIV class="ref-heading"><A name="datatype_float" class="ReferenceHeading">float datatype</A></DIV>
  409.     <DIV class="ref-content">
  410.       Real number, with no limit on digits; can potentially have a leading sign, fractional digits, and optionally an exponent. Punctuation as in U.S. English. Values range from 1.7976931348623157E+308 to 2.2250738585072014E-308. 
  411.     </DIV>
  412.  
  413.     <DIV class="ref-heading"><A name="datatype_id" class="ReferenceHeading">id datatype</A></DIV>
  414.     <DIV class="ref-content">
  415.       Represents the XML ID type. 
  416.     </DIV>
  417.  
  418.     <DIV class="ref-heading"><A name="datatype_idref" class="ReferenceHeading">idref datatype</A></DIV>
  419.     <DIV class="ref-content">
  420.       Represents the XML IDREF type. 
  421.     </DIV>
  422.  
  423.     <DIV class="ref-heading"><A name="datatype_idrefs" class="ReferenceHeading">idrefs datatype</A></DIV>
  424.     <DIV class="ref-content">
  425.       Represents the XML IDREFS type. 
  426.     </DIV>
  427.  
  428.     <DIV class="ref-heading"><A name="datatype_int" class="ReferenceHeading">int datatype</A></DIV>
  429.     <DIV class="ref-content">
  430.       Number, with optional sign, no fractions, and no exponent. 
  431.     </DIV>
  432.  
  433.     <DIV class="ref-heading"><A name="datatype_nmtoken" class="ReferenceHeading">nmtoken datatype</A></DIV>
  434.     <DIV class="ref-content">
  435.       Represents the XML NMTOKEN type. 
  436.     </DIV>
  437.  
  438.     <DIV class="ref-heading"><A name="datatype_nmtokens" class="ReferenceHeading">nmtokens datatype</A></DIV>
  439.     <DIV class="ref-content">
  440.       Represents the XML NMTOKENS type. 
  441.     </DIV>
  442.  
  443.     <DIV class="ref-heading"><A name="datatype_notation" class="ReferenceHeading">notation datatype</A></DIV>
  444.     <DIV class="ref-content">
  445.       Represents a NOTATION type. 
  446.     </DIV>
  447.  
  448.     <DIV class="ref-heading"><A name="datatype_number" class="ReferenceHeading">number datatype</A></DIV>
  449.     <DIV class="ref-content">
  450.       Number, with no limit on digits; can potentially have a leading sign, fractional digits, and optionally an exponent. Punctuation as in U.S. English. (Values have same range as most significant number, R8, 1.7976931348623157E+308 to 2.2250738585072014E-308.) 
  451.     </DIV>
  452.  
  453.     <DIV class="ref-heading"><A name="datatype_string" class="ReferenceHeading">string datatype</A></DIV>
  454.     <DIV class="ref-content">
  455.       Represents a string type. 
  456.     </DIV>
  457.  
  458.     <DIV class="ref-heading"><A name="datatype_time" class="ReferenceHeading">time datatype</A></DIV>
  459.     <DIV class="ref-content">
  460.       Time in a subset ISO 8601 format, with no date and no time zone. For example: "08:15:27". 
  461.     </DIV>
  462.  
  463.     <DIV class="ref-heading"><A name="datatype_time.tz" class="ReferenceHeading">time.tz datatype</A></DIV>
  464.     <DIV class="ref-content">
  465.       Time in a subset ISO 8601 format, with no date but optional time zone. For example: "08:1527-05:00". 
  466.     </DIV>
  467.  
  468.     <DIV class="ref-heading"><A name="datatype_i1" class="ReferenceHeading">i1 datatype</A></DIV>
  469.     <DIV class="ref-content">
  470.       Integer represented in one byte. A number, with optional sign, no fractions, no exponent. For example: "1, 127, -128". 
  471.     </DIV>
  472.  
  473.     <DIV class="ref-heading"><A name="datatype_i2" class="ReferenceHeading">i2 datatype</A></DIV>
  474.     <DIV class="ref-content">
  475.       Integer represented in one word. A number, with optional sign, no fractions, no exponent. For example: "1, 703, -32768". 
  476.     </DIV>
  477.  
  478.     <DIV class="ref-heading"><A name="datatype_i4" class="ReferenceHeading">i4 datatype</A></DIV>
  479.     <DIV class="ref-content">
  480.       Integer represented in four bytes. A number, with optional sign, no fractions, no exponent. For example: "1, 703, -32768, 148343, -1000000000". 
  481.     </DIV>
  482.  
  483.     <DIV class="ref-heading"><A name="datatype_r4" class="ReferenceHeading">r4 datatype</A></DIV>
  484.     <DIV class="ref-content">
  485.       Real number, with seven digit precision; can potentially have a leading sign, fractional digits, and optionally an exponent. Punctuation as in U.S. English. Values range from 3.40282347E+38F to 1.17549435E-38F. 
  486.     </DIV>
  487.  
  488.     <DIV class="ref-heading"><A name="datatype_r8" class="ReferenceHeading">r8</A></DIV>
  489.     <DIV class="ref-content">
  490.       Real number, with 15 digit precision; can potentially have a leading sign, fractional digits, and optionally an exponent. Punctuation as in U.S. English. Values range from 1.7976931348623157E+308 to 2.2250738585072014E-308. 
  491.     </DIV>
  492.  
  493.     <DIV class="ref-heading"><A name="datatype_ui1" class="ReferenceHeading">ui1 datatype</A></DIV>
  494.     <DIV class="ref-content">
  495.       Unsigned integer. A number, unsigned, no fractions, no exponent. For example: "1, 255". 
  496.     </DIV>
  497.  
  498.     <DIV class="ref-heading"><A name="datatype_ui2" class="ReferenceHeading">ui2 datatype</A></DIV>
  499.     <DIV class="ref-content">
  500.       Unsigned integer, two bytes. A number, unsigned, no fractions, no exponent. For example: "1, 255, 65535". 
  501.     </DIV>
  502.  
  503.     <DIV class="ref-heading"><A name="datatype_ui4" class="ReferenceHeading">ui4 datatype</A></DIV>
  504.     <DIV class="ref-content">
  505.       Unsigned integer, four bytes. A number, unsigned, no fractions, no exponent. For example: "1, 703, 3000000000". 
  506.     </DIV>
  507.  
  508.     <DIV class="ref-heading"><A name="datatype_uri" class="ReferenceHeading">uri datatype</A></DIV>
  509.     <DIV class="ref-content">
  510.       Universal Resource Identifier (URI). For example, "urn:schemas-microsoft-com:Office9". 
  511.     </DIV>
  512.  
  513.     <DIV class="ref-heading"><A name="datatype_uuid" class="ReferenceHeading">uuid datatype</A></DIV>
  514.     <DIV class="ref-content">
  515.       Hexadecimal digits representing octets, optional embedded hyphens that are ignored. For example: "333C7BC4-460F-11D0-BC04-0080C7055A83". 
  516.     </DIV>
  517.  
  518.     <HR/>
  519.     <P>This documentation automatically generated using XSL.
  520.     Stylesheet available at
  521.     <A href="http://msdn.microsoft.com/xml">http://msdn.microsoft.com/xml</A>.
  522.     </P>
  523.  
  524.     </BODY>
  525.   </HTML>
  526.  
  527. </xsl:template>
  528.  
  529.  
  530. <xsl:template match="s:ElementType">
  531.  
  532.   <!-- The link and header -->
  533.   <DIV class="elementType" >
  534.     <<A><xsl:attribute name="name">ELEMENT_<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/>></A>
  535.   </DIV>
  536.  
  537.   <!-- First dump the explanation -->
  538.   <xsl:if test="s:description">
  539.     <DIV class="description">
  540.       <xsl:apply-templates select="s:description/node()">
  541.         <xsl:template><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template>
  542.       </xsl:apply-templates>
  543.     </DIV>
  544.   </xsl:if>
  545.  
  546.   <TABLE class="elements">
  547.  
  548.   <!-- Syntax -->
  549.   <TR>
  550.     <TD class="heading">syntax:</TD>
  551.     <TD class="content"><<SPAN class="syntax-element"><xsl:value-of select="@name"/></SPAN>
  552.       <xsl:if test="s:attribute">
  553.         <TABLE cellspacing="0" cellpadding="0">
  554.           <xsl:for-each select="s:attribute" order-by="@type">
  555.             <TR class="syntax-additional-attributes">
  556.               <xsl:choose>
  557.                 <xsl:when test="ancestor(s:ElementType)//s:AttributeType[@name=context()/@type]">
  558.                   <xsl:for-each select="ancestor(s:ElementType)//s:AttributeType[@name=context()/@type]">
  559.                     <TD> <xsl:if test=".[not(@required) or not(@required='yes')]">[</xsl:if></TD>
  560.                     <TD class="syntax-element-attribute">
  561.                       <A class="attribute-link"><xsl:attribute name="HREF">#ELEMENTATTRIBUTE_<xsl:value-of select="ancestor(s:ElementType)/@name"/>_<xsl:value-of select="@name"/></xsl:attribute>
  562.                       <xsl:value-of select="@name"/></A>
  563.                         = <xsl:choose>
  564.                         <xsl:when test="@dt:type[.='enumeration']">
  565.                           <A class="datatype-link" href="#datatype_enumeration">enumeration</A>:
  566.                           <SPAN class="syntax-constant"><xsl:for-each select="@dt:values"><xsl:eval no-entities="t">formatEnum(this, this.selectSingleNode("../@default"));</xsl:eval></xsl:for-each></SPAN>
  567.                         </xsl:when>
  568.                         <xsl:when test="@dt:type">
  569.                           <A class="datatype-link"><xsl:attribute name="href">#datatype_<xsl:value-of select="@dt:type"/></xsl:attribute>
  570.                             <xsl:value-of select="@dt:type"/></A>
  571.                         </xsl:when>
  572.                         <xsl:otherwise>
  573.                           <SPAN class="syntax-attribute">string</SPAN>
  574.                         </xsl:otherwise>
  575.                       </xsl:choose>
  576.                       <xsl:if test=".[not(@required) or not(@required='yes')]"> ]</xsl:if>
  577.                     </TD>
  578.                   </xsl:for-each>
  579.                 </xsl:when>
  580.                 <xsl:otherwise>
  581.                   <xsl:for-each select="ancestor(s:Schema)/s:AttributeType[@name=context()/@type]">
  582.                     <TD> <xsl:if test=".[not(@required) or not(@required='yes')]">[</xsl:if></TD>
  583.                     <TD class="syntax-element-attribute">
  584.                       <A class="attribute-link"><xsl:attribute name="HREF">#ATTRIBUTE_<xsl:value-of select="@name"/></xsl:attribute>
  585.                       <xsl:value-of select="@name"/></A>
  586.                         = <xsl:choose>
  587.                         <xsl:when test="@dt:type[.='enumeration']">
  588.                           <A class="datatype-link" href="#datatype_enumeration">enumeration</A>:
  589.                           <SPAN class="syntax-constant"><xsl:for-each select="@dt:values"><xsl:eval no-entities="t">formatEnum(this, this.selectSingleNode("../@default"));</xsl:eval></xsl:for-each></SPAN>
  590.                         </xsl:when>
  591.                         <xsl:when test="@dt:type">
  592.                           <A class="datatype-link"><xsl:attribute name="href">#datatype_<xsl:value-of select="@dt:type"/></xsl:attribute>
  593.                             <xsl:value-of select="@dt:type"/></A>
  594.                         </xsl:when>
  595.                         <xsl:otherwise>
  596.                           <SPAN class="syntax-attribute">string</SPAN>
  597.                         </xsl:otherwise>
  598.                       </xsl:choose>
  599.                       <xsl:if test=".[not(@required) or not(@required='yes')]"> ]</xsl:if>
  600.                     </TD>
  601.                   </xsl:for-each>
  602.                 </xsl:otherwise>
  603.               </xsl:choose>
  604.             </TR>
  605.           </xsl:for-each>
  606.         </TABLE>
  607.       </xsl:if>
  608.       
  609.       <xsl:choose>
  610.         <xsl:when test="@content[.='empty'] | @content[.='eltOnly' and not(..//s:element)]">/></xsl:when>
  611.         <xsl:otherwise>
  612.           >
  613.           <TABLE class="syntax-children">
  614.             <xsl:choose>
  615.               <xsl:when test="@dt:type">
  616.                 <xsl:for-each select="@dt:type">
  617.                   <TR><TD> </TD><TD colspan="2"><A class="datatype-link"><xsl:attribute name="href">#datatype_<xsl:value-of select="."/></xsl:attribute>
  618.                   <xsl:value-of select="."/></A> datatype</TD></TR>
  619.                 </xsl:for-each>
  620.               </xsl:when>
  621.               
  622.               <xsl:when test="s:element | s:group"> 
  623.                 <TR>
  624.                   <TD class="left-group"> </TD>
  625.                   <TD class="syntax-order">
  626.                     <A class="reference-link"><xsl:attribute name="href">#order_<xsl:value-of select="@order"/></xsl:attribute>
  627.                       <xsl:value-of select="@order"/></A>
  628.                     <xsl:if test=".[not(@order)]"><A class="reference-link" href="#order_many">(many)</A></xsl:if>
  629.                   </TD>
  630.                 
  631.                   <TD>
  632.                     <TABLE class="syntax-children">
  633.                    
  634.                       <xsl:apply-templates select="s:element | s:group">
  635.             
  636.                         <xsl:template/>
  637.                         
  638.                         <xsl:template match="s:group">
  639.                           <TR>
  640.                             <TD class="left-group"> </TD>
  641.                             <TD class="syntax-order">
  642.                               <A class="reference-link"><xsl:attribute name="href">#order_<xsl:value-of select="@order"/></xsl:attribute>
  643.                                 <xsl:value-of select="@order"/></A>
  644.                               <xsl:if test=".[not(@order)]"><A class="reference-link" href="#order_many">(many)</A></xsl:if>
  645.                             </TD>
  646.                             <TD>
  647.                               <TABLE class="syntax-children"><xsl:apply-templates select="s:element | s:group"/></TABLE>
  648.                             </TD>
  649.                             <TD class="right-group"> </TD>
  650.                             <xsl:if test="@maxOccurs[.='*']"><TD STYLE="vertical-align:middle">+</TD></xsl:if>
  651.                           </TR>
  652.                           <xsl:if test="s:description">
  653.                             <TR>
  654.                               <TD colspan="2"/>
  655.                               <TD class="syntax-group-description" colspan="2">
  656.                                 <xsl:apply-templates select="s:description/node()">
  657.                                   <xsl:template><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template>
  658.                                 </xsl:apply-templates>
  659.                               </TD>
  660.                             </TR>
  661.                           </xsl:if>
  662.                         </xsl:template>
  663.                         
  664.                         <xsl:template match="s:group[@minOccurs='0']">
  665.                           <TR>
  666.                             <TD class="left-bracket"> </TD>
  667.                             <TD class="syntax-order">
  668.                               <A class="reference-link"><xsl:attribute name="href">#order_<xsl:value-of select="@order"/></xsl:attribute>
  669.                                 <xsl:value-of select="@order"/></A>
  670.                               <xsl:if test=".[not(@order)]"><A class="reference-link" href="#order_many">(many)</A></xsl:if>
  671.                             </TD>
  672.                             <TD>
  673.                               <TABLE class="syntax-children"><xsl:apply-templates select="s:element | s:group"/></TABLE>
  674.                             </TD>
  675.                             <TD class="right-bracket"> </TD>
  676.                             <xsl:if test="@maxOccurs[.='*']"><TD STYLE="vertical-align:middle">*</TD></xsl:if>
  677.                           </TR>
  678.                           <xsl:if test="s:description">
  679.                             <TR>
  680.                               <TD colspan="2"/>
  681.                               <TD class="syntax-group-description" colspan="2">
  682.                                 <xsl:apply-templates select="s:description/node()">
  683.                                   <xsl:template><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template>
  684.                                 </xsl:apply-templates>
  685.                               </TD>
  686.                             </TR>
  687.                           </xsl:if>
  688.                         </xsl:template>
  689.                         
  690.                         <xsl:template match="s:element">
  691.                           <TR><TD> </TD><TD colspan="2"><<A class="element-link"><xsl:attribute name="href">#ELEMENT_<xsl:value-of select="@type"/></xsl:attribute><xsl:value-of select="@type"/></A>>
  692.                           <xsl:if test="@maxOccurs[.='*']">+</xsl:if></TD></TR>
  693.                         </xsl:template>
  694.                         
  695.                         <xsl:template match="s:element[@minOccurs='0']">
  696.                           <TR><TD>[ </TD><TD colspan="2"><<A class="element-link"><xsl:attribute name="href">#ELEMENT_<xsl:value-of select="@type"/></xsl:attribute><xsl:value-of select="@type"/></A>> ]
  697.                           <xsl:if test="@maxOccurs[.='*']">*</xsl:if></TD></TR>
  698.                         </xsl:template>
  699.                       </xsl:apply-templates>
  700.             
  701.                     </TABLE>
  702.                   </TD>
  703.                 </TR>
  704.               </xsl:when>
  705.             </xsl:choose>
  706.             
  707.             <xsl:if test=".[not(@dt:type)][@content='mixed' or @content='textOnly']">
  708.               <TR><TD> </TD><TD colspan="2" class="note"><xsl:value-of select="@content"/> content</TD></TR>
  709.             </xsl:if>
  710.               
  711.            <xsl:if test=".[not(@dt:type)][not(@content)]">
  712.               <TR><TD> </TD><TD colspan="2" class="note">mixed content</TD></TR>
  713.             </xsl:if>
  714.               
  715.          </TABLE>
  716.           
  717.           </<SPAN class="syntax-element"><xsl:value-of select="@name"/></SPAN>>
  718.         </xsl:otherwise>
  719.       </xsl:choose>
  720.     </TD>
  721.   </TR>
  722.  
  723.   <TR>
  724.     <TD class="heading">content:</TD>
  725.     <TD class="content">
  726.       <xsl:choose>
  727.         <xsl:when test="@dt:type">
  728.           <A class="datatype-link"><xsl:attribute name="href">#datatype_<xsl:value-of select="@dt:type"/></xsl:attribute>
  729.             <xsl:value-of select="@dt:type"/></A> datatype
  730.         </xsl:when>
  731.         <xsl:when test="@content">
  732.           <A class="reference-link"><xsl:attribute name="href">#content_<xsl:value-of select="@content"/></xsl:attribute>
  733.             <xsl:value-of select="@content"/></A>
  734.         </xsl:when>
  735.         <xsl:otherwise>
  736.           <A class="reference-link" href="#content_mixed">mixed</A> (default)
  737.         </xsl:otherwise>
  738.       </xsl:choose>
  739.     </TD>
  740.   </TR>
  741.   
  742.   <TR>
  743.     <TD class="heading">order:</TD>
  744.     <TD class="content">
  745.       <xsl:choose>
  746.         <xsl:when test="@dt:type">
  747.           <SPAN class="note">Ignored when a datatype is specified.</SPAN>
  748.         </xsl:when>
  749.         <xsl:when test="@order">
  750.           <A class="reference-link"><xsl:attribute name="href">#order_<xsl:value-of select="@order"/></xsl:attribute>
  751.             <xsl:value-of select="@order"/></A>
  752.         </xsl:when>
  753.         <xsl:otherwise>
  754.           <A class="reference-link" href="#order_many">many</A> (default)
  755.         </xsl:otherwise>
  756.       </xsl:choose>
  757.     </TD>
  758.   </TR>
  759.         
  760.   <!-- Find the parents -->
  761.   <TR>
  762.     <TD class="heading">parents: </TD>
  763.     <TD class="content">
  764.       <xsl:choose>
  765.         <xsl:when test="../s:ElementType[.//s:element[@type = context()/@name ]]">
  766.           <xsl:for-each order-by="@name" select="../s:ElementType[.//s:element[@type = context()/@name ]]">
  767.             <A class="element-link" ><xsl:attribute name="HREF">#ELEMENT_<xsl:value-of select="@name"/></xsl:attribute>
  768.               <xsl:value-of select="@name"/></A><xsl:if test="context()[not(end())]">, </xsl:if>
  769.           </xsl:for-each>
  770.         </xsl:when>
  771.         <xsl:otherwise>
  772.           <xsl:choose>
  773.             <xsl:when test=".//s:element">
  774.               <SPAN class="note">No parents found.  This is probably the document element.</SPAN>
  775.             </xsl:when>
  776.             <xsl:otherwise>
  777.               <SPAN class="note">No parents found.  This probably an orphan.</SPAN>
  778.             </xsl:otherwise>
  779.           </xsl:choose>
  780.         </xsl:otherwise>
  781.       </xsl:choose>
  782.     </TD>
  783.   </TR>
  784.   
  785.   <!-- dump the possible children -->
  786.   <TR>
  787.     <TD class="heading">childen: </TD>
  788.     <TD class="content">
  789.       <xsl:choose>
  790.         <xsl:when test="@dt:type">
  791.           <SPAN class="note">No children allowed when a datatype is specified.</SPAN>
  792.         </xsl:when>
  793.         <xsl:when test="@content[.='textOnly']">
  794.           <SPAN class="note">No children allowed when content is <A class="reference-link" href="#content_textOnly">textOnly</A>.</SPAN>
  795.         </xsl:when>
  796.         <xsl:when test=".//s:element">
  797.           <xsl:for-each select=".//s:element" order-by="@type">
  798.             <A class="element-link" ><xsl:attribute name="HREF">#ELEMENT_<xsl:value-of select="@type"/></xsl:attribute>
  799.               <xsl:value-of select="@type"/></A><xsl:if test="context()[not(end())]">, </xsl:if>
  800.           </xsl:for-each>
  801.         </xsl:when>
  802.         <xsl:otherwise>
  803.           <I>(none)</I>
  804.         </xsl:otherwise>
  805.       </xsl:choose>
  806.     </TD>
  807.   </TR>
  808.   
  809.   <!-- dump the possible attributes -->
  810.   <TR>
  811.     <TD class="heading">attributes: </TD>
  812.     <TD class="content">
  813.       <xsl:choose>
  814.         <xsl:when test="s:attribute">
  815.           <xsl:for-each select="s:attribute" order-by="@type">
  816.             <A class="attribute-link" ><xsl:choose>
  817.               <xsl:when test="ancestor(s:ElementType)//s:AttributeType[@name=context()/@type]">
  818.               <xsl:attribute name="HREF">#ELEMENTATTRIBUTE_<xsl:value-of select="ancestor(s:ElementType)/@name"/>_<xsl:value-of select="@type"/></xsl:attribute>
  819.                 <xsl:value-of select="@type"/></xsl:when>
  820.               <xsl:otherwise>
  821.                 <xsl:attribute name="HREF">#ATTRIBUTE_<xsl:value-of select="@type"/></xsl:attribute>
  822.                 <xsl:value-of select="@type"/></xsl:otherwise>
  823.             </xsl:choose></A><xsl:if test="context()[not(end())]">, </xsl:if>
  824.           </xsl:for-each>
  825.         </xsl:when>
  826.         <xsl:otherwise>
  827.           <I>(none)</I>
  828.         </xsl:otherwise>
  829.       </xsl:choose>
  830.     </TD>
  831.   </TR>
  832.  
  833.   <TR>
  834.     <TD class="heading">model:</TD>
  835.     <TD class="content">
  836.       <xsl:choose>
  837.         <xsl:when test="@dt:type">
  838.           <SPAN class="note">Treated as <A class="reference-link" href="#model_closed">closed</A> when a datatype is specified.</SPAN>
  839.         </xsl:when>
  840.         <xsl:when test="@model">
  841.           <A class="reference-link"><xsl:attribute name="href">#model_<xsl:value-of select="@model"/></xsl:attribute>
  842.             <xsl:value-of select="@model"/></A>
  843.         </xsl:when>
  844.         <xsl:otherwise>
  845.           <A class="reference-link" href="#model_open">open</A> (default)
  846.         </xsl:otherwise>
  847.       </xsl:choose>
  848.     </TD>
  849.   </TR>
  850.   
  851.   <TR>
  852.     <TD class="heading">source:</TD>
  853.     <TD class="content">
  854.       <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
  855.     </TD>
  856.   </TR>
  857.   
  858.   </TABLE>
  859.  
  860. </xsl:template>
  861.  
  862.  
  863. <xsl:template match="s:AttributeType">
  864.  
  865.   <!-- The link and header -->
  866.   <DIV class="attributeType" >
  867.     <xsl:choose>
  868.       <xsl:when test="..[@name]">
  869.         <A><xsl:attribute name="name">ELEMENTATTRIBUTE_<xsl:value-of select="../@name"/>_<xsl:value-of select="@name"/></xsl:attribute>
  870.           <<xsl:value-of select="../@name"/> <xsl:value-of select="@name"/>>
  871.         </A>
  872.       </xsl:when>
  873.       <xsl:otherwise>
  874.         <A><xsl:attribute name="name">ATTRIBUTE_<xsl:value-of select="@name"/></xsl:attribute>
  875.           <xsl:value-of select="@name"/>
  876.         </A>
  877.       </xsl:otherwise>
  878.     </xsl:choose>
  879.   </DIV>
  880.     
  881.   <xsl:if test="s:description">
  882.     <DIV class="description">
  883.       <xsl:apply-templates select="s:description/node()">
  884.         <xsl:template><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template>
  885.       </xsl:apply-templates>
  886.     </DIV>
  887.   </xsl:if>
  888.  
  889.   <TABLE class="elements">
  890.  
  891.   <!-- First dump the explanation -->
  892.   <!-- Syntax -->
  893.   <TR>
  894.     <TD class="heading">syntax:</TD>
  895.     <TD class="content">
  896.       <xsl:if test=".[not(@required) or not(@required='yes')]">[ </xsl:if>
  897.       <xsl:value-of select="@name"/>
  898.       = <xsl:choose>
  899.         <xsl:when test="@dt:type[.='enumeration']">
  900.           <A class="datatype-link"><xsl:attribute name="href">#datatype_enumeration</xsl:attribute>enumeration</A>:
  901.           <SPAN class="syntax-constant"><xsl:for-each select="@dt:values"><xsl:eval no-entities="t">formatEnum(this, this.selectSingleNode("../@default"));</xsl:eval></xsl:for-each></SPAN>
  902.         </xsl:when>
  903.         <xsl:when test="@dt:type">
  904.           <A class="datatype-link"><xsl:attribute name="href">#datatype_<xsl:value-of select="@dt:type"/></xsl:attribute>
  905.           <xsl:value-of select="@dt:type"/></A>
  906.         </xsl:when>
  907.         <xsl:otherwise>
  908.           <SPAN class="syntax-attribute">string</SPAN>
  909.         </xsl:otherwise>
  910.       </xsl:choose>
  911.       <xsl:if test=".[not(@required) or not(@required='yes')]"> ]</xsl:if>
  912.     </TD>
  913.   </TR>
  914.  
  915.  
  916.   <!-- is this attribute required ? -->
  917.   <TR>
  918.     <TD class="heading">required:</TD>
  919.     <TD class="content">
  920.       <xsl:choose>
  921.         <xsl:when test="@required">
  922.           <xsl:value-of select="@required"/>
  923.         </xsl:when>
  924.         <xsl:otherwise>
  925.           no (default)
  926.         </xsl:otherwise>
  927.       </xsl:choose>
  928.     </TD>
  929.   </TR>
  930.  
  931.  
  932.   <!-- Is there a datatype? -->
  933.   <xsl:if test="@dt:type">
  934.     <TR>
  935.       <TD class="heading">datatype:</TD>
  936.       <TD class="content"><A class="datatype-link"><xsl:attribute name="href">#datatype_<xsl:value-of select="@dt:type"/></xsl:attribute>
  937.         <xsl:value-of select="@dt:type"/></A></TD>
  938.     </TR>
  939.   </xsl:if>
  940.   
  941.   <xsl:if test="@dt:values">
  942.     <TR>
  943.       <TD class="heading">values:</TD>
  944.       <TD class="content"><xsl:for-each select="@dt:values"><xsl:eval no-entities="t">formatEnum(this, this.selectSingleNode("../@default"));</xsl:eval></xsl:for-each></TD>
  945.     </TR>
  946.   </xsl:if>
  947.   
  948.   <!-- Is there a default value? -->
  949.   <xsl:if test="@default">
  950.     <TR>
  951.       <TD class="heading">default value:</TD>
  952.       <TD class="content"><B><xsl:value-of select="@default"/></B></TD>
  953.     </TR>
  954.   </xsl:if>
  955.  
  956.   <!-- Elements this attribute can appear on -->
  957.   <TR>
  958.     <TD class="heading">elements:</TD>
  959.     <TD>
  960.       <xsl:choose>
  961.         <xsl:when test="..[@name]">
  962.           <A class="element-link" ><xsl:attribute name="HREF">#ELEMENT_<xsl:value-of select="../@name"/></xsl:attribute>
  963.             <xsl:value-of select="../@name"/></A>
  964.         </xsl:when>
  965.         <xsl:otherwise>
  966.           <xsl:choose>
  967.             <xsl:when test="../s:ElementType/s:attribute[@type=context()/@name]">
  968.               <xsl:for-each select="../s:ElementType/s:attribute[@type=context()/@name]" order-by="@name">
  969.                 <A class="element-link" ><xsl:attribute name="HREF">#ELEMENT_<xsl:value-of select="../@name"/></xsl:attribute>
  970.                   <xsl:value-of select="../@name"/></A><xsl:if test="context()[not(end())]">, </xsl:if>
  971.               </xsl:for-each>
  972.             </xsl:when>
  973.             <xsl:otherwise>
  974.               <I>(none)</I>
  975.             </xsl:otherwise>
  976.           </xsl:choose>
  977.         </xsl:otherwise>
  978.       </xsl:choose>
  979.     </TD>
  980.   </TR>
  981.   
  982.   <TR>
  983.     <TD class="heading">source:</TD>
  984.     <TD class="content">
  985.       <PRE><xsl:eval>suppressNS(this.xml)</xsl:eval></PRE>
  986.     </TD>
  987.   </TR>
  988.   
  989.   </TABLE>
  990. </xsl:template>
  991.  
  992. <xsl:script language="JScript"><![CDATA[
  993.   function formatEnum(values, defaultValue)
  994.   {
  995.     var e = values.nodeValue;
  996.     // trim trailing spaces
  997.     while (e.charAt(e.length - 1) == " ")
  998.       e = e.substring(0, e.length - 1);
  999.     var re = new RegExp("\\s+", "g");
  1000.     e = e.replace(re, " | ")
  1001.     if (defaultValue)
  1002.     {
  1003.       var d = defaultValue.nodeValue;
  1004.       var re = new RegExp(d, "g");
  1005.       e = e.replace(re, "<B>" + d + "</B>");
  1006.     }
  1007.     return e;
  1008.   }
  1009.  
  1010.   function suppressNS(xmlSource)
  1011.   {
  1012.     var re = / xmlns[^=]*=['"]urn:schemas-microsoft-com:xml-data['"]/g;
  1013.     xmlSource = xmlSource.replace(re, "");
  1014.     var re = / xmlns[^=]*=['"]urn:schemas-microsoft-com:datatypes['"]/g;
  1015.     xmlSource = xmlSource.replace(re, "");
  1016.     return xmlSource;
  1017.   }
  1018. ]]></xsl:script>
  1019. </xsl:stylesheet>
  1020.  
  1021.